import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';  
  
// 定义请求和响应的类型  
export interface ApiResponse<T> {  
  data?: T;  
  status?: number;  
  message?: string;  
}  
  
// 封装Axios请求  
class ApiClient {  
  private instance: AxiosInstance;  
  
  constructor() {  
    this.instance = axios.create({
        baseURL:'http://localhost:8888/api',
        timeout: 5000,
    });  
  
    // 请求拦截器示例  
    this.instance.interceptors.request.use(  
      (config) => {  
        // 在发送请求之前做些什么  
        // 例如：添加token到请求头  
        // config.headers.Authorization = `Bearer ${token}`;  
        return config;  
      },  
      (error) => {  
        // 对请求错误做些什么  
        return Promise.reject(error);  
      }  
    );  
  
    // 响应拦截器示例  
    this.instance.interceptors.response.use(  
      (response) => {  
        // 对响应数据做点什么  
        // 例如：检查状态码，处理错误等  
        return response.data;  
      },  
      (error) => {  
        // 对响应错误做点什么  
        if (error.response) {  
          // 请求已发出，但服务器响应的状态码不在 2xx 范围内  
          console.error(`Error: ${error.response.status}`);  
          return Promise.reject(error.response.data);  
        } else if (error.request) {  
          // 请求已发出，但没有收到响应  
          console.error('Error', error.request);  
          return Promise.reject(error.request);  
        } else {  
          // 发出请求时发生了某种错误  
          console.error('Error', error.message);  
          return Promise.reject(error.message);  
        }  
      }  
    );  
  }  
  
  // 封装GET请求  
  get<T>(url: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {  
    return this.instance.get(url, config)
    .then((response) => { 
      // 根据你的API响应结构，这里可能需要一些调整  
      return {  
        data: <T>response,  
      };  
    });  
  }  
  
  // 封装POST请求（其他方法类似）  
  post<T>(url: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {  
    return this.instance.post(url, config).then((response: AxiosResponse<ApiResponse<T>>) => {  
        // 根据你的API响应结构，这里可能需要一些调整  
        return {  
          data: response.data.data,  
          status: response.data.status,  
          message: response.data.message,  
        };  
      }); 
  }  
  
  // 其他HTTP方法...  
}  
  
export default ApiClient;